package 学习JDBC;

import java.sql.*;


public class QueryTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connection conn = null;
        Statement s = null;
        ResultSet r = null;
        try {
            //反射的方式，加载一个类（类加载：执行静态变量，静态代码块）
            //数据库驱动包就可以在这种操作下，执行对应的初始化工作（驱动）
            Class.forName("com.mysql.jdbc.Driver");
            //获取数据库连接：Connection接口，需要使用jdbc中的，不要使用mysql中的
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java43?user=root&password=123456&useUnicode=true&characterEncoding=UTF-8&useSSL=false");
            System.out.println(conn);
            //通过连接对象创建操作命令对象Statement（使用jdbc中的），该对象是用于操作sql的一个抽象的对象
            s = conn.createStatement();
            //查询：
            // （1）调用Statement操作命令对象的executeQuery(sql)
            // （2）返回一个ResultSet结果集对象（查询sql执行的结果集）
            r = s.executeQuery("select id,sn,name,qq_mail,classes_id from student where id>3");
            //处理结果集：结果集可能是多行数据，需要遍历来获取
            // 调用next就移动到下一行，返回true代表该行有数据，返回false代表该行没有数据
            while (r.next()) {//一直遍历到最后
                //进入循环，代表操作遍历的一行数据
                int id = r.getInt("id");
                String sn = r.getString("sn");
                String name = r.getString("name");
                String qqMail = r.getString("qq_mail");
                int classesId = r.getInt("classes_id");
                System.out.printf("id=%s, sn=%s, name=%s, qqMail=%s, classesId=%s\n",
                        id, sn, name, qqMail, classesId);
            }
        }finally {//无论如何，都要释放资源
            //释放资源：
            //（1）无论什么情况（异常）
            //（2）释放的顺序，和创建的顺序要相反（结果集对象，操作命令对象，数据库连接对象）
            if(r != null)//出现异常的时候，对象可能还没有赋值（初始化），调用close就会出现空指针异常
                r.close();
            if(s != null)
                s.close();
            if(conn != null)
                conn.close();
        }

    }
}

/*
while(r.next()) {
                System.out.println(r);
                int id = r.getInt("id");
                String name = r.getString("name");
                int number = r.getInt("number");
                String status = r.getString("status");
                String borrower = r.getString("borrower");
                System.out.println(id + name + number + status + borrower);
            }


            //通过连接对象创造操作对象statement
            s = conn.createStatement();
            r = s.executeQuery("select * from user where account = ");
*/

